home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 011 / brutil.arc / MUL.ASM < prev    next >
Encoding:
Assembly Source File  |  1987-12-04  |  2.0 KB  |  102 lines

  1. BUFLEN    EQU    32768        ; buffer length, alter to taste
  2.  
  3. CR    EQU    0DH        ; ASCII carriage return
  4. LF    EQU    0AH        ; ASCII line feed
  5.  
  6.                 ; DOS 2.x pre-defined handles
  7. STDIN    EQU    0        ; standard input file
  8. STDOUT    EQU    1        ; standard output file
  9. STDERR    EQU    2        ; standard error file
  10.  
  11. CODE    SEGMENT
  12.  
  13.     ASSUME    CS:CODE,DS:CODE
  14.  
  15.     ORG    100H        ; start .COM at 100H
  16.  
  17. MUL:
  18. MUL3:    MOV    AH,3FH        ; read standard input.
  19.     MOV    BX,STDIN
  20.     MOV    CX,BUFLEN
  21.     MOV    DX,OFFSET (BUFFER)
  22.     INT    21H
  23.     JC    MUL4        ; JUMP, ERROR.
  24.     MOV    NCHAR,AX    ; save length of read.
  25.     CMP    AX,0        ; nothing read in?
  26.     JNE    MUL4A        ; if not end of file, skip exit.
  27. MUL4:
  28.     MOV    AX,4C00H    ; exit with return code=0.
  29.     INT    21H
  30. MUL4A:    MOV    SI,OFFSET (BUFFER)
  31.     MOV    DI,SI
  32.     MOV    CX,NCHAR
  33. MUL5:    LODSB
  34.     CMP    AL,CR
  35.     JZ    TURNOF
  36.     CMP    AL,';'
  37.     JZ    TURNON
  38.     CMP    AL,'"'
  39.     JZ    TOGGLE
  40.     CMP    AL,"'"
  41.     JZ    TOGGLE
  42.     CMP    BYTE PTR MODE,';'
  43.     JZ    DOMASK
  44.     CMP    BYTE PTR MODE,0
  45.     JNZ    NOMASK
  46. DOMASK: CMP    AL,'A'
  47.     JC    NOMASK
  48.     CMP    AL,'Z'+1
  49.     JNC    NOMASK
  50.     OR    AL,20H
  51. NOMASK: STOSB
  52.     LOOP    MUL5
  53.     JMP    MUL4B
  54. TOGGLE: CMP    BYTE PTR MODE,';'
  55.     JZ    NOMASK
  56.     CMP    BYTE PTR MODE,0
  57.     JZ    SETIT
  58.     CMP    MODE,AL
  59.     JNZ    NOMASK
  60. SETIT:    XOR    MODE,AL
  61.     JMP    NOMASK
  62. TURNON: CMP    BYTE PTR MODE,0
  63.     JNZ    NOMASK
  64.     MOV    MODE,AL
  65.     JMP    NOMASK
  66. TURNOF: MOV    BYTE PTR MODE,0
  67.     JMP    NOMASK
  68. MUL4B:    MOV    AH,40H        ; now write to standard output...
  69.     MOV    BX,STDOUT
  70.     MOV    CX,NCHAR
  71.     MOV    DX,OFFSET (BUFFER)
  72.     INT    21H
  73.     JC    MUL7        ; jump, write failed.
  74.     CMP    AX,NCHAR
  75.     JNE    MUL7        ; jump, write failed.
  76.     JMP    MUL3        ; read again until end of file.
  77.  
  78. MUL7:    MOV    DX,OFFSET ERR2    ; print "Disk is full".
  79.     MOV    CX,OFFSET ERR2LEN
  80.     MOV    AH,40H        ; display error message and exit.
  81.     MOV    BX,STDERR
  82.     INT    21H
  83.     MOV    AX,4C02H
  84.     INT    21H
  85. NCHAR    DW    0        ; number of chars actually input.
  86. MODE    DB    0        ; current mode indicator
  87.  
  88. ERR2    DB    CR,LF
  89.     DB    'MUL: Disk is full.'
  90.     DB    CR,LF
  91. ERR2LEN EQU    (THIS BYTE)-(OFFSET ERR2)
  92.  
  93. BUFFER    LABEL    BYTE        ; data is read here from
  94.                 ; standard input
  95.  
  96. CODE    ENDS
  97.  
  98.     END    MUL
  99. N EQU    (THIS BYTE)-(OFFSET ERR2)
  100.  
  101. BUFFER    LABEL    BYTE        ; data is read here from
  102.                 ; standar